突撃!隣の開発環境 パート1 【Wantedly編】
こんにちは!おおはしりきたけです。今回は突撃!隣の開発環境というタイトルでイケてる開発会社さんの開発環境についてインタビューさせてもらいました。第1弾として、iOS オールスター勉強会でベストプレゼンターに輝いたWantedlyの杉上さんとRubyエンジニアの森脇さんにお願いしました。Wantedlyさんは既に@yimajoさんがQiitaで連載しているiOSアプリ開発の現場で訊いてみた!シリーズでiOSの開発現場についてのインタビューはされており一部重複してしまっている部分もありますが、ご了承下さい。
突撃!隣の開発環境とは
技術事例やノウハウなどは、ブログや勉強会などで共有されることが多いと思います。しかし、各社の開発環境や開発体制などは意外と共有されていないこと多いと思います。ノウハウの流出になるかもしれませんが、それ以上に、より良い開発を目指している会社さん同士で情報交換を行い、良いチーム、良いプロダクトを作っていくという志の会社さんの為の情報共有のための企画になります。開発環境や開発体制なども技術領域によっても変わってくると思いますが、この突撃!隣のシリーズでは様々な会社さんのイケてるツールの使い方や、仕事が捗る開発体制についてインタビューを行っていく予定です。
Wantedly紹介
どんなことをやっているのか?
「シゴトでココロオドル人をふやす」というミッションを掲げ、ビジネスSNSのWantedly(ウォンテッドリー)を展開しています。 Wantedlyには、シゴト仲間とつながり、つながりを管理する機能や、自分のシゴトに関する情報をまとめておけるプロフィールページの他、会社に遊びにいける機能があります。Wantedlyはスマホアプリも展開しており、2014年にはiPhone,iPad,AndroidでBESTアプリに選ばれました。
開発環境について
まずは、Wantedlyさんの開発環境について色々と伺っていこうかと思います。
システム構成
Wantedlyのシステム構成は、以下の様な構成になっています。サーバーは、AWSで構築されておりDevOps実現の為にDockerが使われているのが注目ですね。サーバーサイドの言語はRubyでフレームワークはRailsを利用しているとのことでした。RDBがPostgreSQLなのが気になったので、なぜPostgreSQLなのか伺った所、Herokuから移行したためとのことでした。納得です。
開発端末
基本的にほぼ全員Macを使っているとのことで、Web系のエンジニアさんはMacBookAirが支給され、iOSやAndoroidなど、コンパイルにマシンに負荷がかかるエンジニアの方はMacBookProが支給されているとのことでした。モニタも支給されていました。
コミュニケーションツール
プロジェクトを円滑にするために様々なコミュニケーションツールを使うことになります。チャットやチケットの管理、仕様の共有などどのように行っているのか聞いてみました。
チャットツール
チャットツールは、去年の夏までHipChatを利用していたとのことですが、現在はSlackに切り替えたとのことです。切り替えた理由としては「イケてそうだから」という理由でした。「イケてそう」このワードは、開発する上では非常にエンジニアのモチベーションを上げてくれるワードだと思います。
ルームは1つで運用しており、チャンネルが30程度あるとのことです。全員、モバイル、インフラという技術レイヤーで分かれていたり、国内、海外といった職責で分かれていたりとのことでした。github、自前のデプロイツール、NewRelic、DataDogなどのツールと連携しているとのことでした。また、Slackでは議論は殆ど行わず、議論はgithubのissueで行うというのが非常に印象的でした。
エンジニアが集中するために、非同期コミュニケーションと言うのは非常に重要です。Wantedlyさんでは、新人研修用にまとめた開発フローがQiitaに公開されており、公開されている開発フロー研修 @ Wantedlyに以下の様に書いてあります。
- 必要のない部分は、肩たたきやSlack MentionなどをしてすぐにResponseを求めるのをやめよう!
- mentionしなくても答えが帰ってくるという前提環境をみんなでつくろう!
2の前提環境がないと1の方法で仕事が進まなくなるので、2を実現するのが大事!
Mentionによって、レスポンスについては早くなるかもしれませんが、Mentionが気になると作業に集中出来ないという場面も多くなります。そこでWantedlyさんでは、Mentionの強弱をつけているとのことでした。具体的にはgithubのissueはレスポンスを返し、Slackなどは作業が終わってから返すといったようにやっているとのことでした。
プロジェクト管理ツール
タスクは、全てgithubのissueで管理しており、Wantedlyのissueは、プルリクを含めると5/11日時点で12254あるとのことです。
仕様の共有方法
仕様についても、gitthubのissueに記載しているとのことでした。issueを書くときはWHY(なぜコレをやるのか)を必ず書く。HOWやWHATについても書くようにし、自分以外の人(新入社員、他チームの方、1年後の自分)に向けて書くようにしているとのことでした。
最初にこの話を聞いた時、仕様が一箇所に固まっていないので分かりにくくないのかな?と思ったんですが、1箇所に固めても忙しくなったりするとメンテナンスされない場合もあったりするので、仕様となるissueを丁寧に書き、github上で検索すれば結局出てくるので、このやり方は非常に効果的なのではないかと思いました。
リポジトリ
もちろんgithubです。リポジトリ数は50運用フローについては、こちらも開発フロー研修 @ Wantedlyに記載されていいますが、以下の流れで進めているとのことでした。
- Issue を作る (コードを書く前に十分に議論、設計をする)
- Branch を作る
- コードを書いて幾つか Commit を重ねる
- [WIP]でPull Requestを出す。 (この時何が終わってないのかも書くと良い)
- レビュアーをAssignする。 (相談事があるときはここで相談する)
- コードを書き進める
- 終わったら、[WIP]を外し、レビューアーをmentionする
- レビューを受け、コードを修正する
- レビューも終わり、テストが通っていたらマージされる
- デプロイ
- デプロイ後の確認
自動化ツール
CI環境は、RailsはWerker、モバイルはCircleCIを導入し始めたとのことでした。インフラはTerraformなどを利用して自動化を進めているとのことでした。自動化すると課題になるのがキーをどう管理するかという問題にぶち当たると思います。現在は、人で管理しているとのことでしたが、VAULTというキーを管理するツールを検討中とのことでした。VAULTは弊社でも調査してみようと思います。
また、iOSに関してはfastlaneというツールを利用してキャプチャなどの自動化を行っているとのことでした
デザインツール
これも意外と共有されていない、デザイナさんが使うデザインツール。Wantedlyのデザイナさんは1名でコードもバリバリかけるスーパーデザイナさんだそうです。Photoshop、Illustratorなどが基本ですが、最近ではSketch3を利用することも多くなったそうです。Sketch3流行っていますね。最近は弊社でも使うことが多くなってきました。
モバイルアプリでのデザイナさんとのやりとりもお聞きしたところ、ホワイトボードなどにペーパープロトを書いて、2〜3日でプロトタイプのUIをコードで書いてしまうとのことでした。アニメーションなどの細かいチューニングについても上記のスーパーデザイナさんがコードもかけるため調整するとのことでした。凄いスピード感だと思います。
開発体制
開発チーム
Wantedlyのエンジニアさんの内訳は以下になります。
- CTO:1名
- iOSエンジニア:4名
- Androidエンジニア:1名
- Webエンジニア:7名
- デザイナ:1名
1日の動き
Wantedlyさんの朝は早く9時出社とのことです。5分遅れるとRedBull1本という中々厳しいペナルティーが課せられるようですw。出社後に全社で朝会を行っているとのことでしたので、朝にみんな集まって今日やることを確認するためにも必要なことなのかもしれません。全社のMTG後は作業にとりかかるとのことでした。決まったミーティングは2〜3日に1度チームの打合せがあるくらいで、あとはエンジニア同士が席で決めていくことが多いとのことです。
開発チームについて
縦軸として国内、海外、新規事業という3つの大きなセクションに分かれており、横軸としてiOSやAndroid、Webといったように技術軸で分かれているとのことです。昔はエンジニアも少なかっため、サービスごとのアサインの兼任なども多かったようですが、最近はエンジニアも増えてきたので専任になってきているとのことです。
写真はペアデバッグを行っているCTO川崎さん
開発プロセスについて
開発プロセスは明確には決まっておらず、チームの中で問題が発生したら改善する形で進めている。Wantedlyさんの組織はフラットということで、プロダクトについてどう進めていくのか?という質問をした所、リードエンジニアがプロダクトオーナーをやってリーティングはしているとのことでした。
また、先日リリースされたSyncでは、ZenHubを使ってScrum風にプロジェクトを進めたということでした。毎週KPTを行いプロセス改善を行うことにより、プロジェクトに非常に良い影響があったとのことです。SyncチームがKPTをやっているのを見て海外チームでもやってみたらこちらも非常に効果があったと言っていました。「最良のアーキテクチャ・要求・設計は,自己組織的なチームから生み出される」というのはアジャイルマニフェストの一節ですが、Wantedlyさんはのissueでの議論を見させてもらいましたが、非常に活発な組織だなと感じました。マネージャーがいないということでしたが、自己組織化ができているからうまく回っているんだなぁと思いました。
コミュニケーションについて
Wantedlyさんは自分で誰かを巻き込む文化にしている。OneOnOneで解決。出来ない場合はチームで解決をしていく形をとっており、トップダウンが多いスタートアップには珍しいボトムアップ型の組織のようです。ナレッジを公開していく文化(クラスメソッドと同じ!)なので、WantedlyさんのQiitaには様々なナレッジが公開されています。
夜になると、和気あいあいとこんな感じでコーディングが行われていました。
テストについて
RailsはRSpecでテストコードを書いており、キッチリとしたTDDではないけどテストを先に書く文化になっているとのことでした。モバイルについてはテストを導入し始めてQuickでテストコードを書いているとのことです。Viewの部分はKifを使っているがログイン部分にとどまっているとのことです。Viewについては日々変わる部分でもあるので、弊社でもViewについては、どのやり方が良いのか非常に悩みどころです。
その他
シゴトでココロオドル人を増やすという企業理念のWantedlyさんですが、その為にはエンジニアがシゴトでココロオドル開発をする必要があるということで、その為には自分で考えてやりたいことをできるようにするいくつかの施策を実施しています。
HouseMeeting
経営方針など大枠を伝えて、後は自分で考える。これにより遠回りかもしれないけど、自分たちで考え、自分たちで行動するというモチベーションに繋がる。
カルチャーランチ
カルチャーランチには2種類あって、社長がWantedlyのビジョンやカルチャーについて話をする社長とのカルチャーランチ、もう一つは議題に沿ってメンバーが集まってランチを行う。これにより、他人が考えたWhyを自分のモノにできたり、自分に決定権があるという認識ができるようになる。
さらに、今後の施策としてgithubのコミットなどをカウント、エンジニアの活動量を計測しエンジニアリングの見える化を試みているとのことです。
今回登場したツール
コミュニケーション
自動化
テスト
監視
デザイン
- ベクタードローイングツール:Sketch3
※Wantedlyさんでは、上記以外にも様々なツールを利用しております。上記はインタビュー時に伺った内容のものを記載しています。
まとめ
第1回目はWantedlyさんにインタビューさせてもらいました。仕様をgithubのissueに記載し、1箇所にまとめないというやり方は目からウロコでした。自社サービスをやっている会社さんでは非常に有効な方法なのではないでしょうか。また、会社の文化としてビジョンとカルチャーが徹底的に共有されており、ボトムアップの組織にすることにより、自己組織化されマネージャーなど指示を出す人がいなくても仕事が回る文化ができていて素晴らしいなと思いました。Wantedlyさんに負けないように弊社もココロオドル開発をしていきたいと思います。
最後に写真を取らせていただきました。左から森脇さん、私、杉上さんです。遅い時間までありがとうございました!!
次回は、実名グルメサービスで凄く勢いのあるRettyさんに取材します。最近移転したいうことで、新オフィスに伺わせていただきます!!
参考リンク
http://qiita.com/awakia/items/c571e93e96a1ec28044f
https://speakerdeck.com/morizotter/kptwoyatutemita
https://speakerdeck.com/awakia/developer-productivity-at-wantedly
https://www.wantedly.com/projects/10020